/***************************************************************************
** 版权所有:   Copyright (c) 2020-2030
** 文件名称:  function.cpp
** 当前版本:  v1.0
** 作    者:
** 完成日期: 2024-07-15
** 修改记录:
** 修改日期:
** 版本号  :
** 修改人  :
** 修改内容:
***************************************************************************/

/*****************************头文件****************************************/

/*****************************宏定义****************************************/

/*****************************结构体或类型定义*******************************/

/*****************************全局变量****************************************/

/*****************************本地变量****************************************/

/*****************************函数或类声明****************************************/

/*****************************函数或类实现****************************************/
#include <unistd.h>
#include <iostream>
#include <chrono>
#include <string>
#include <unordered_map>

// 定义一个简单的计时器类
class Timer {
public:
    Timer(const std::string& functionName) : functionName(functionName) {
        startTime = std::chrono::high_resolution_clock::now();
    }

    ~Timer() {
        auto endTime = std::chrono::high_resolution_clock::now();
        auto duration = std::chrono::duration_cast<std::chrono::microseconds>(endTime - startTime);
        std::cout << "Function " << functionName << " took " << duration.count() << " microseconds." << std::endl;
    }

private:
    std::string functionName;
    std::chrono::time_point<std::chrono::high_resolution_clock> startTime;
};

// 定义宏来简化计时器的使用
#define MEASURE_TIME(func) \
do{\
    Timer timer(#func); \
    func ;\
}while(0)

// 示例函数，用于演示
void slowFunction() {
    // 模拟耗时操作
    for (int i = 0; i < 1000000; ++i) {
        // do something
    }
}

void fastFunction() {
    // 模拟快速操作
}

void testabc(int iLoopTimes) {
    printf("hello, testabc!!!");
    for(int i=0; i<iLoopTimes; i++)
    {
        sleep(1);
    }
}

int main() {
    // 调用需要检测执行效率的函数
    MEASURE_TIME(slowFunction());
    MEASURE_TIME(fastFunction());
    MEASURE_TIME(testabc(2));
    MEASURE_TIME(testabc(5));
    MEASURE_TIME(testabc(10));

    return 0;
}

/*****************************by extern "C"****************************************/

#ifdef __cplusplus
extern "C" {
#endif

/*****************************头文件****************************************/

/*****************************宏定义****************************************/

/*****************************结构体或类型定义*******************************/

/*****************************全局变量****************************************/

/*****************************本地变量****************************************/

/*****************************函数或类声明****************************************/

/*****************************函数或类实现****************************************/

#ifdef __cplusplus
}
#endif
